package com.hiultra.archive.utils.sgsm;

import com.sgitg.sgcc.sm.SM3Utils;
import org.bouncycastle.util.encoders.Hex;

/**
 * 本类主要提供国密SM3算法 使用样例，
 * 此样例包含国密SM3算法的加密方法的使用；
 *
 * *********注意事项*********
 *  1) 所使用的包名为com.sgitg.sgcc.sm.*;
 *  2) 此算法使用只能依赖bcprov-jdk16-1.46.jar,项目中不能同时含有bouncy castle的其他版本的jar，
 * 否则使用过程中算法运算会抛出异常
 */
public class SM3Util extends SM3Utils {

	/**
	 * 国密SM3算法加密
	 * @param plainText 需要进行加密的数据
	 * @return 返回加密后hex编号字符
	 */
	public final String SM3Digest(String plainText) {
		// 需要加密的数据转化为byte数组
		byte[] byteArray = Strings.toUTF8ByteArray(plainText);
		SG_SM3UpDate(byteArray);
		byte[] sg_SM3Final = null;
		try {
			sg_SM3Final = SG_SM3Final();
		} catch (Exception e) {
			throw new RuntimeException("国密SM3算法加密失败",e);
		}
		return Strings.fromByteArray(Hex.encode(sg_SM3Final));
	}

	public static void main(String[] args) {
		System.out.println("************************SM3摘要***************************");
		//需要加密数据
		String plainText = "znyyt_1234";
		SM3Util sm3Util = new SM3Util();
		//使用国密SM3算法进行加密
		String sm3Digest = sm3Util.SM3Digest(plainText);
		System.out.println("国密SM3加密后为：" + sm3Digest);
		System.out.println("7b9b1f4e43889175405ace53ae0475b1".length());
		SM4Util sm4=new SM4Util();
		System.out.println(sm4.encryptBySM4ECB(sm3Digest,"30862b23eb5a2fc6c4022e7aafdb0e32"));
	}
}
